//js 自带运算会出现：所有含浮点数的裸加减乘除都有可能触发精度问题；如0.1+0.2；4100.065 * 100。故采用以下方法替换
module.exports = {
	//乘法
	mul(a, b) {
		let c = 0,
			d = a.toString(),
			e = b.toString();
		try {
			c += d.split(".")[1].length;
		} catch (f) {}
		try {
			c += e.split(".")[1].length;
		} catch (f) {}
		return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c);
	},
	//加法
	add(a, b) {
		let c, d, e;
		try {
			c = a.toString().split(".")[1].length;
		} catch (f) {
			c = 0;
		}
		try {
			d = b.toString().split(".")[1].length;
		} catch (f) {
			d = 0;
		}
		e = Math.pow(10, Math.max(c, d));
		return (this.mul(a, e) + this.mul(b, e)) / e;
	},
	//减法
	sub(a, b) {
	    let c, d, e;
	    try {
	        c = a.toString().split(".")[1].length;
	    } catch (f) {
	        c = 0;
	    }
	    try {
	        d = b.toString().split(".")[1].length;
	    } catch (f) {
	        d = 0;
	    }
	    e = Math.pow(10, Math.max(c, d));
	    return (this.mul(a, e) - this.mul(b, e)) / e;
	},
	//除法
	divide(a, b) {
	    var c, d, e = 0,
	           f = 0;
	    try {
	        e = a.toString().split(".")[1].length;
	    } catch (g) {
	        e = 0;
	    }
	    try {
	        f = b.toString().split(".")[1].length;
	    } catch (g) {
	        f = 0;
	    }
	    c = Number(a.toString().replace(".", ""));
	    d = Number(b.toString().replace(".", ""));
	    return this.mul(c / d, Math.pow(10, f - e));
	},
	//浮点数四舍五入,保留固定小数位
	round(num, precision) {
	  const base = Math.pow(10, precision)
	  return (Math.round((num.toPrecision(17) * base).toFixed(1)) / base).toFixed(precision)
	}

}
